#! /bin/sh

#脚本名称： RegMigLogs
#创建日期：05/06/25
#作者：xxx
#版本: v1.0
#描述：自动移动日志文件到指定目录，目前是硬编码方式写定目录

LOG_FILE="/var/log/RegMigLogs.log"
MOVE_LOG_FILES=("/var/lib/jenkins/workspace/public-manage/*.log" "/var/lib/jenkins/workspace/logistics-manage/*.log")
MOVE_PATH=("/mnt/twobp-log/public-log/" "/mnt/twobp-log/logistics-log/")


# 创建日志文件
touch "$LOG_FILE"

log_message(){
    message="[$(date '+%Y-%m-%d %H:%M:%S')] $1"
    echo "$message" >> $LOG_FILE
}

checkParam(){
    # 判断命令是否安装
    command -v "$1" > /dev/null 2>&1 || { log_message "error: 需要先安装 $1 命令"; exit 1;}
}


main(){
    # 每次写入日志文件，先换行
    echo -e "\n" >> $LOG_FILE
    log_message "开始日志移动任务......"

    # 检查命令
    checkParam "lsof"
    checkParam "sed"

    log_file_count=${#MOVE_LOG_FILES[@]}
    move_path_count=${#MOVE_PATH[@]}

    if [ "$log_file_count" -ne "$move_path_count" ]; then
        log_message "error: 日志文件和移动路径数量不匹配，请检查脚本配置"
        exit 1
    fi

    for ((i=0;i<log_file_count;i++));do
        log_path="${MOVE_LOG_FILES[$i]}"
        move_dir="${MOVE_PATH[$i]}"

        # 创建目录
        # mkdir -p "$move_dir"

        log_message "开始处理日志文件: $log_path 到 $move_dir"

        for log_file in $log_path; do
           if [ ! -f "$log_file" ] ; then
                log_message "文件 $log_file 不存在，跳过: $log_file"
                continue
            fi
        
        # 判断文件否正在被使用
        if lsof "$log_file" > /dev/null 2>&1; then
            log_message "文件 $log_file 正在被使用，跳过: $log_file"
            continue
        fi

        # 判断文件是否被打开
        pre_dir=$(dirname "$log_file")
        swp_file_name=$(echo "$log_file" | sed 's:.*/::')
        if lsof "$pre_dir/.$swp_file_name.swp" > /dev/null 2>&1; then
            log_message "文件 $log_file 正在被打开，跳过: $log_file"
            continue
        fi

        log_message "开始移动文件: $log_file 到 $move_dir ......"
        # 移动文件
        if mv "$log_file" "$move_dir" 2>/dev/null; then
                log_message "成功移动文件: $log_file"
            else
                log_message "error:无法移动文件 $log_file (权限不足?)"
            fi
        log_message "移动文件结束: $log_file 到 $move_dir ......"

        done 
    done
}

# 执行函数
main    